\begin{tikzpicture}[>=Stealth, scale=0.7]
    \draw [->] (-2, 0) -- (4, 0) node[anchor=north] {$x$} coordinate(x axis);
    \draw [->] (0, -2) -- (0, 4) node[anchor=east]  {$y$} coordinate(y axis);
    \node at (-0.3, -0.3) {\small $O$};
    \foreach \x in {-1, 2, 3} {
        \draw (\x, 0.2) -- (\x, 0) node[anchor=north] {\small $\x$};
    }
    \foreach \x in {1} {
        \draw (\x, 0) -- (\x, 0.2) node[anchor=south] {\small $\x$};
    }
    \foreach \y in {-1, 2, 3} {
        \draw (0.2, \y) -- (0, \y) node[anchor=east] {\small $\y$};
    }
    \foreach \y in {1} {
        \draw (0, \y) -- (0.2, \y) node[anchor=west] {\small $\y$};
    }

    % 第一种写法：分成两步
    \draw [dashed] (-1, 0) -- (-1, 1) -- (0, 1);
    \filldraw [fill=black] (-1, 1) circle (0.05) node[anchor=east] {\small $Q$};

    % 第二种写法，一句完成点、线的绘制
    \filldraw [dashed, fill=black] (1, 0) -- (1, -1) circle (0.05) node[anchor=west] {\small $P$} -- (0, -1);

    % 第三种写法，在已知点坐标的情况下，利用 x axis 和 y axis 实现绘制
    \coordinate (M) at (3, 2);
    \filldraw [dashed, fill=black] (M |- x axis) node [above right] {\small $M_1$}
            -- (M) circle (0.05) node[anchor=west] {\small $M$}
            -- (M -| y axis) node [below right] {\small $M_2$};
    \coordinate (N) at (2, 3);
    \filldraw [dashed, fill=black] (N |- x axis) -- (N) circle (0.05) node[anchor=west] {\small $N$} -- (N -| y axis);

    % 其中，
    % 第二种写法更适合于固定坐标，即点的坐标在绘制前已经确定。
    % 第三种写法更适合于动态坐标，即点的坐标是在绘制过程中计算出来的。
\end{tikzpicture}

